//
//  SQLiteManger.swift
//  2-FMDB体验
//
//  Created by 牛威 on 15/12/20.
//  Copyright © 2015年 牛威. All rights reserved.
//

import Foundation

//MARK: - 创建单例 -->关于数据库名字的考虑 起一个用户最不想看到的名字

private let dbName = "readme.db"

class SQLiteManger {
    
    
    //这个类没有父类,默认没有任何属性和方法
    // SQLiteManger()只要调用这个,就会调用init函数
    //所以'默认'的init函数什么都不做
    
    static let sharedManger = SQLiteManger()
    
    //设置一个全局数据操作队列
    
    var queue : FMDatabaseQueue
    
    //MARK: - 打开数据库 创建队列
    
    private init(){
    
        //沙盒路径 可读可写
        var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
        path = (path as NSString).stringByAppendingPathComponent(dbName)
        
        print("数据库路径"+path)
        
        //数据库存在 就会创建队列 打开数据库
        //数据库不存在 创建数据库 ,同时创建队列,并打开数据库
    
       queue =  FMDatabaseQueue.init(path: path)
        
        createTable()
    
    }
    
    //MARK: - 创建表
    
    private func createTable(){
        
        //获取路径 只读属性
        
        let path = NSBundle.mainBundle().pathForResource("db.sql", ofType: nil)
        
        //读取sql
        
        let sql = try! String(contentsOfFile: path!)
        
        
        
        //执行单条表格
        queue.inDatabase { (db) -> Void in
            
//            if  db.executeUpdate(sql) { //创建单表
            if db.executeStatements(sql) { //创建多表 最好选择这个 除非有特殊需求
                //可以执行多个sql,保证一次性创建成功i
            
               print("创表成功")
            }else{
            
               print("创表失败")
            }
            
        }
        
    }
    
    
    //查询的重构 同步执行数据库查询
    
     func execRecordset(sql : String)->[[String : AnyObject]]?{
        
        
        var persons = [[String : AnyObject]]()
        
    
        SQLiteManger.sharedManger.queue.inDatabase { (db) -> Void in
            
            guard let result =  db.executeQuery(sql) else{
                
                print("无结果")
                
                return 
            }
            
            
            while result.next(){
                
                let colCount = result.columnCount()
                
                //遍历每一列获取值
                
                var dict = [String : AnyObject]()
                
                for col in 0..<colCount {
                    
                    //内容\(obj)
                    let obj = result.objectForColumnIndex(col)
                    //列名\(colName
                    let colName = result.columnNameForIndex(col)
                    
                    dict[colName] = obj
                    
                }
                
                persons.append(dict)
                
            }
            
//            print(persons)
            
        }

    
     return persons
    
    
    }
    
}